package br.com.sgpv2.service.entidade;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import br.com.sgpv2.controler.NegocioExeception;
import br.com.sgpv2.entity.organograma.Entidade;
import br.com.sgpv2.hibernate.entidade.EntidadeRepository;

/**
 * Classe de serviço de Pessoa.
 */
@Service(value = "entidadeService")
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class EntidadeServiceImpl implements EntidadeService {

	private EntidadeRepository entidadeRepository;
	
	@Override
	public void salvar(Entidade entidade) {
		entidadeRepository.salvar(entidade);

	}

	@Override
	public void alterar(Entidade entidade) {
		entidadeRepository.alterar(entidade);

	}

	@Override
	public List<Entidade> listar() {
		return entidadeRepository.listar();
	}

	@Override
	@Transactional
	public void excluir(Entidade entidade) {
		entidadeRepository.excluir(entidade);
	}
	
	/**
	 * Método retorna a entidade cadastrada no banco, onde a mesma foi registrada pela carga na implantação do sistema.
	 * @return
	 */
	public Entidade buscarEntidade() {
		
		Entidade retorno = null;
		
		List<Entidade> entidades = entidadeRepository.listar();
		
		if (entidades != null && entidades.size() > 0) {
			retorno = entidades.get(0);
		}
		
		return retorno;
	}

	@Override
	public Entidade buscar(Integer pk) throws NegocioExeception {
		return entidadeRepository.buscar(pk);
	}

	public EntidadeRepository getEntidadeRepository() {
		return entidadeRepository;
	}

	@Autowired
	public void setEntidadeRepository(EntidadeRepository entidadeRepository) {
		this.entidadeRepository = entidadeRepository;
	}

	@Override
	public Entidade buscarEntidadePorNome(String entidadeTransiente) {
		return entidadeRepository.buscarEntidadePorNome(entidadeTransiente);
	}

}
